﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace EntitiesLayer
{
    public class Maquina : IEntity
    {
        #region Atributos
        private int _id;
        private String _nombre;
        private String _numMaquina;
        private String _numActivo;
        private bool _estado;
        #endregion Atributos

        #region Propiedades
        public int Id
        {
            get { return _id; }
            set { _id = value; }
        }

        public String Nombre
        {
            get { return _nombre; }
            set { _nombre = value; }
        }

        public String NumMaquina
        {
            get { return _numMaquina; }
            set { _numMaquina = value; }
        }

        public String NumActivo
        {
            get { return _numActivo; }
            set { _numActivo = value; }
        }

        public bool Estado
        {
            get { return _estado; }
            set { _estado = value; }
        }
        #endregion Propiedades

        #region Constructores
        public Maquina(int pid, String pnombre, String pnumMaquina, String pnumActivo, bool pestado)
        {
            Id = pid;
            Nombre = pnombre;
            NumMaquina = pnumMaquina;
            NumActivo = pnumActivo;
            Estado = pestado;
        }

        public Maquina(String pnombre, String pnumMaquina, String pnumActivo, bool pestado)
        {
            Nombre = pnombre;
            NumMaquina = pnumMaquina;
            NumActivo = pnumActivo;
            Estado = pestado;
        }

        public Maquina()
        {

        }
        #endregion Constructores

        #region Reglas del objeto
        public bool IsValid
        {
            get { return (GetRuleViolations().Count() == 0); }
        }

        public IEnumerable<RuleViolation> GetRuleViolations()
        {
            if (String.IsNullOrEmpty(Nombre))
            {
                yield return new RuleViolation("Nombre Requerido", "Nombre");
            }
            if (String.IsNullOrEmpty(NumMaquina))
            {
                yield return new RuleViolation("Número de máquina requerido", "NumMaquina");
            }
            if (String.IsNullOrEmpty(NumActivo))
            {
                yield return new RuleViolation("Número de activo requerido", "NumActivo");
            }

        }
        #endregion Reglas del objeto
    }
}
